grammar Q;

program
    :   stat+
    ;

stat:   table   // 创建表格
    |   insert  // 插入内容
    |   assign  // 赋值表格给变量
    |   query   // 查询
    |   print   // 输出结果
    ;

print:  'print' expr ';'
    ;

// START: table
table
    :   'create' 'table' tbl=ID
        '(' 'primary' 'key' key=ID (',' columns+=ID)+ ')' ';'
    ;
// END: table

// START: assign
assign : ID '=' expr ';';
// END: assign

// START: insert
insert
    : 'insert' 'into' ID 'set' setFields ';'
    ;
    
// END: insert
    
// START: fields
setFields
    :   set (',' set)*
    ;
set
    :   ID '=' expr
    ;
// END: fields
    
query
    :   'select' columns+=ID (',' columns+=ID)* 'from' tbl=ID
        ('where' key=ID '=' expr)?
    ;

// START: expr
expr
    :   ID
    |   INT 
    |   STRING
    |   query
    ;
// END: expr

ID  : [a-zA-Z_][a-zA-Z0-9_]*;

INT : [0-9]+ ;

STRING
    :   '\'' ~'\''* '\''
    ;

COMMENT
    :   '//' ~('\n'|'\r')* '\r'? '\n' -> channel(HIDDEN)
    ;

WS  :   ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) -> channel(HIDDEN)
    ;
